﻿#include<iostream>
using namespace std;

#define MaxSize 10 // 顺序表的最大容量

// 顺序表的定义
typedef struct {
	int data[MaxSize]; // 存储空间的基地址
	int length; // 当前长度
} SqList;

// 顺序表的初始化
void InitList(SqList& L) {
	L.length = 0;
	cout << "顺序表初始化完成" << endl;
}

// 创建顺序表
void CreateList(SqList& L, int n) {
	cout << "请传入数值" << endl;
	for (int i = 0; i < n; i++) {
		cin >> L.data[i];//从键盘读取数据
		L.length++;
	}
}

// 打印顺序表
void Print(SqList L) {
	cout << "目前顺序表为：" << endl;
	for (int k = 0; k < L.length; k++) {
		cout << L.data[k] << "\t";
	}
	cout << endl;
}

// 查找元素
void GetElem(SqList L) {
	int p, e;
	cout << "请输入要查找元素的位置" << endl;
	cin >> p;
	if (p < 1 || p > L.length) {
		cout << "位置不合法" << endl;
	}
	else {
		e = L.data[p - 1];
		cout << "你要查找的元素为：" << e << endl;
	}
}

// 插入元素
void InsertElem(SqList& L, int p, int e) {
	if (p < 1 || p > L.length + 1 || L.length == MaxSize) {
		cout << "插入位置不合法" << endl;
		return;
	}
	for (int i = L.length - 1; i >= p - 1; i--) {
		L.data[i + 1] = L.data[i];
	}
	L.data[p - 1] = e;
	L.length++;
	cout << "插入成功" << endl;
}

// 删除元素
void DeleteElem(SqList& L, int p) {
	if (p < 1 || p > L.length) {
		cout << "删除位置不合法" << endl;
		return;
	}
	for (int i = p; i < L.length; i++) {
		L.data[i - 1] = L.data[i];
	}
	L.length--;
	cout << "删除成功" << endl;
}

int main() {
	SqList L;
	int n, p, e;

	cout << "请输入顺序表长度" << endl;
	cin >> n;

	InitList(L); // 初始化顺序表
	CreateList(L, n); // 创建顺序表
	Print(L); // 打印顺序表

	GetElem(L); // 查找元素

	cout << "请输入要插入的位置及元素" << endl;
	cin >> p >> e;
	InsertElem(L, p, e); // 插入元素
	Print(L); // 打印顺序表

	cout << "请输入要删除的元素位置" << endl;
	cin >> p;
	DeleteElem(L, p); // 删除元素
	Print(L); // 打印顺序表

	return 0;
}